package com.projetTDA.tournoi;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedHashMap;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.projetTDA.R;
import com.projetTDA.bdd.DataAccessLayer;
import com.projetTDA.metier.Equipe;
import com.projetTDA.metier.Joueur;
import com.projetTDA.metier.Tournoi;

//Fonction qui permet de creer un tournoi (ecran 2)
public class CreerTournoi2 extends ActionBarActivity {

	final String EXTRA_TOURNOI_NOM = "tournoiNom";
	final String EXTRA_TOURNOI_SPORT = "tournoiSport";
	final String EXTRA_TOURNOI_TYPE_IS_MODE_CHAMPIONNAT = "tournoiType";

	public static ArrayList<ArrayAdapter<String>> adaptersMatchs;
	public static ArrayList<Equipe> listeEquipesCrees;

	private Spinner spinnerNombreEquipes;
	private Button boutonValider;
	private LinearLayout layoutGlobalEquipes;
	private LinearLayout layoutGlobalCreerTournoi2;

	private TextView textViewNomSport; 
	private TextView textViewNomTournoi; 
	private TextView textViewTypeTournoi;

	public static LinkedHashMap<Equipe, Integer> equipesDuTournoi;

	static
	{
		adaptersMatchs = new ArrayList<ArrayAdapter<String>>();
		listeEquipesCrees = new ArrayList<Equipe>();
		equipesDuTournoi = new LinkedHashMap<Equipe,Integer>();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.creer_tournoi2);

		adaptersMatchs.clear();

		spinnerNombreEquipes = (Spinner) findViewById(R.id.spinnerNombreEquipes);
		boutonValider = (Button) findViewById(R.id.ButtonSuivant);
		layoutGlobalEquipes = (LinearLayout) findViewById(R.id.layoutGlobalEquipes);
		layoutGlobalCreerTournoi2 = (LinearLayout) findViewById(R.id.layoutGlobalCreerTournoi2);

		//Variables recuperees du formulaire precedent
		Intent intent = getIntent();
		final String isTournoiModeChampionnat = intent.getStringExtra(EXTRA_TOURNOI_TYPE_IS_MODE_CHAMPIONNAT);
		final String tournoiSport = intent.getStringExtra(EXTRA_TOURNOI_SPORT);
		final String tournoiNom = intent.getStringExtra(EXTRA_TOURNOI_NOM);

		try {

			//On affiche les info saisies sur l'écran précédent
			textViewNomSport = new TextView(CreerTournoi2.this);
			textViewNomSport.setText(tournoiSport);
			textViewNomTournoi = new TextView(CreerTournoi2.this);
			textViewNomTournoi.setText(tournoiNom);
			textViewTypeTournoi = new TextView(CreerTournoi2.this);

			//En mode championnant on peut selectionner de 1 a 8 equipes
			if (isTournoiModeChampionnat.equals("true")) {
				textViewTypeTournoi.setText("Championnat");

				List<String> SpinnerArrayNombreEquipes =  new ArrayList<String>();

				for (int i = 1; i < 8; i++ ) {
					String nbEquipes = Integer.toString(i+1);
					SpinnerArrayNombreEquipes.add(nbEquipes);
				}


				ArrayAdapter<String> adapterMatchs = new ArrayAdapter<String>(CreerTournoi2.this, android.R.layout.simple_spinner_item, SpinnerArrayNombreEquipes);

				adapterMatchs.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				spinnerNombreEquipes.setAdapter(adapterMatchs);

			}
			//En mode eliminatoire, on ne peut selectionne que 2, 4 ou 8 equipes
			else {
				List<String> SpinnerArrayNombreEquipes =  new ArrayList<String>();

				SpinnerArrayNombreEquipes.add("2");
				SpinnerArrayNombreEquipes.add("4");
				SpinnerArrayNombreEquipes.add("8");

				ArrayAdapter<String> adapterMatchs = new ArrayAdapter<String>(CreerTournoi2.this, android.R.layout.simple_spinner_item, SpinnerArrayNombreEquipes);

				adapterMatchs.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				spinnerNombreEquipes.setAdapter(adapterMatchs);


				textViewTypeTournoi.setText("Eliminatoire");
			}

			LinearLayout layoutRecapitulatifDonnees = new LinearLayout(CreerTournoi2.this);
			layoutRecapitulatifDonnees.addView(textViewNomSport);
			layoutRecapitulatifDonnees.addView(textViewNomTournoi);
			layoutRecapitulatifDonnees.addView(textViewTypeTournoi);
			layoutGlobalCreerTournoi2.addView(layoutRecapitulatifDonnees, 0);

			//Gestion des evenements lors du changement de valeur du spinner nombreEquipes
			spinnerNombreEquipes.setOnItemSelectedListener(new OnItemSelectedListener() {
				@SuppressLint("NewApi")
				@Override
				public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
					final int nombreEquipes = Integer.parseInt(spinnerNombreEquipes.getSelectedItem().toString());

					//On vide le layout des équipes pour éviter d'avoir 500 champs à chaque changement de valeur du spinner nombre d'equipes
					layoutGlobalEquipes.removeAllViews();
					equipesDuTournoi.clear();

					adaptersMatchs.clear();

					for (int i = 0; i<nombreEquipes;i++) {
						//Variable locale permettant d'avoir accès au numéro de l'équipe à l'intérieur de la méthode du clic sur le bouton
						final int numeroEquipe = i;

						//un linearLayout qui englobe les info de l'equipe courante
						LinearLayout layoutEquipeCourante = new LinearLayout(CreerTournoi2.this);
						LinearLayout layoutEquipeCourantePart1 = new LinearLayout(CreerTournoi2.this);
						LinearLayout layoutEquipeCourantePart2 = new LinearLayout(CreerTournoi2.this);

						//On crée chacun de nos composants
						TextView labelEquipe = new TextView(CreerTournoi2.this);
						labelEquipe.setText("Equipe " + (i+1) + " : ");

						final EditText editTextNomEquipe = new EditText(CreerTournoi2.this);
						editTextNomEquipe.setHint("Nom de l'equipe n°" + (i+1));

						//Création du combobox
						final Spinner spinnerlisteDesJoueurs = new Spinner (CreerTournoi2.this);
						List<String> SpinnerArrayMatchs = new ArrayList<String>();
						SpinnerArrayMatchs.add("Aucun joueur");

						ArrayAdapter<String> adapterMatchs = new ArrayAdapter<String>(CreerTournoi2.this, android.R.layout.simple_spinner_item, SpinnerArrayMatchs);
						adapterMatchs.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
						spinnerlisteDesJoueurs.setAdapter(adapterMatchs);
						spinnerlisteDesJoueurs.setDropDownWidth(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
						adaptersMatchs.add(adapterMatchs);

						//Configuration du bouton
						final Button boutonInsererJoueurDansEquipe = new Button(CreerTournoi2.this);
						boutonInsererJoueurDansEquipe.setText("+");
						boutonInsererJoueurDansEquipe.setId(i);

						DataAccessLayer myDal = new DataAccessLayer(CreerTournoi2.this);
						List<Joueur> listeJoueurs = myDal.getListeJoueurs();
						AddPlayersToTeam.listJoueurAjoutEquipe.clear();
						AddPlayersToTeam.listJoueurAjoutEquipe.addAll(listeJoueurs);

						//Gestion du clic sur le bouton ajouter joueur
						boutonInsererJoueurDansEquipe.setOnClickListener(
								new OnClickListener() {
									public void onClick(View v) {

										//On désactive et masque le bouton ajouter
										boutonInsererJoueurDansEquipe.setEnabled(false);
										boutonInsererJoueurDansEquipe.setVisibility(View.INVISIBLE);

										// On crée un équipe avec juste le nom pour le moment.
										// Et on l'ajoute à la liste statique
										Equipe eqpCourante = new Equipe(0, editTextNomEquipe.getText().toString().equals("")?"Equipe "+(numeroEquipe+1):editTextNomEquipe.getText().toString());
										listeEquipesCrees.add(eqpCourante);

										Intent toAddPlayersToTeam = new Intent(CreerTournoi2.this, AddPlayersToTeam.class);										
										toAddPlayersToTeam.putExtra("num_btn", numeroEquipe);
										startActivity(toAddPlayersToTeam);

									}
								});



						//On les ajoute au layout courant de l'équipe en cours
						//layout1
						layoutEquipeCourantePart1.addView(labelEquipe);
						layoutEquipeCourantePart1.addView(editTextNomEquipe);
						layoutEquipeCourantePart1.addView(boutonInsererJoueurDansEquipe);

						//layout2
						layoutEquipeCourantePart2.addView(spinnerlisteDesJoueurs);

						//ajout des sous_layouts
						layoutEquipeCourante.addView(layoutEquipeCourantePart1);
						layoutEquipeCourante.addView(layoutEquipeCourantePart2);

						layoutEquipeCourante.setOrientation(LinearLayout.VERTICAL);

						//Enfin, on insère le layout de l'équipe N dans le global
						layoutGlobalEquipes.addView(layoutEquipeCourante);
					}
				}

				@Override
				public void onNothingSelected(AdapterView<?> parentView) {

				}

			});


			//Gestion du bouton valider
			boutonValider.setOnClickListener(
					new OnClickListener() {
						@Override
						public void onClick(View v) {

							DataAccessLayer myDal = new DataAccessLayer(CreerTournoi2.this);
							List<Equipe> listeEQ = myDal.getListeEquipes();
							for(Equipe e : listeEQ)
							{
								System.out.println("<---ICI--->\n" + e);
							}

							if (equipesDuTournoi.size() >= 2) {
								//On recupere et on formate la date actuelle
								GregorianCalendar cal = new GregorianCalendar();
								DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
								Date date = cal.getTime();
								String dateFormatee = dateFormat.format(date);

								//
								Tournoi unTournoi = new Tournoi(tournoiNom, dateFormatee, tournoiSport, equipesDuTournoi, Boolean.parseBoolean(isTournoiModeChampionnat));
								DataAccessLayer dal = new DataAccessLayer(CreerTournoi2.this);
								unTournoi = dal.ajouterTournoiBDD(unTournoi);

								//On créé une popup avec un bouton ok qui renverra vers le menu general
								AlertDialog.Builder popupWithOkButton = new AlertDialog.Builder(CreerTournoi2.this);
								//On affiche les infos du tournoi dans la popup
								popupWithOkButton.setMessage(unTournoi.afficherInfosEssentielles());
								//On configure le bouton ok pour retourner vers l'accueil
								popupWithOkButton.setNeutralButton("OK",new DialogInterface.OnClickListener() {
									@Override
									public void onClick(DialogInterface dialog, int which) {
										//On redirige vers le menu de sélection d'un joueur : soit selectionne parmi la liste, soit cree a la volee
										Intent toGererTournoi = new Intent(CreerTournoi2.this, GererTournoi.class);
										startActivity(toGererTournoi);
									}
								});

								//On rend visible la popup
								popupWithOkButton.show();




							}
							else {
								Toast.makeText(CreerTournoi2.this, "Vous devez renseigner au moins deux équipes pour créer un tournoi !", Toast.LENGTH_LONG).show();
							}
						}
					});

		}
		catch (Exception e) {
			e.printStackTrace();
		}



	}

}